<?php

namespace App\Http\Controllers\Home;

use App\Http\Controllers\Controller;
use Illuminate\Http\Request;
use App\Components\Tools;
use App\Models\UserModels\Xunpan;

class XunpanDisController extends Controller {

    private $parames;

    function __construct(Request $request) {
        $this->parames = $request->all();
    }

    /**
     *    询盘定时任务分配
     *    dataList			包含（关键词id，会员id，关键词名，询盘套餐总次数，套餐起始时间）
     *    numAll            询盘套餐的总数
     *    countAll       	会员总共得到的询盘数
     *    dayList           会员当天得到的询盘 评论的id 集合 array
     *    commentIds        会员当天得到的询盘 评论的id 集合 string
     *    countDay        	会员当天得到的询盘数
     *    countKey       	会员添加的可用关键次总数
     *    xun_number        当日可得到的询盘上限数
     *    nowCount       	当前可用的询盘数
     *    numOneKey       	每个关键词每天 每次 平均多少条
     */
    function index() {
        set_time_limit(0);
        $xunpan = new Xunpan();

         //echo 'begin'.date('Y-m-d H:i:s').'<br/>';
        
        $first = Tools::getOneconfig('/config/inquiry.json', ['first', 'xun_number']) ? Tools::getOneconfig('/config/inquiry.json', ['first', 'xun_number']) : 20;
        $middle =Tools::getOneconfig('/config/inquiry.json', ['middle', 'xun_number']) ? Tools::getOneconfig('/config/inquiry.json', ['middle', 'xun_number']) : 40;
        $tall = Tools::getOneconfig('/config/inquiry.json', ['tall', 'xun_number']) ? Tools::getOneconfig('/config/inquiry.json', ['tall', 'xun_number']) : 60;

        $date = isset($this->parames['date']) ? $this->parames['date'] : date('Y-m-d', time());
        
        //查询可用的会员开通套餐未到时的可用的关键词询盘次数
        $dataList = $xunpan->selectKeyAllByDate($date);
        
        if ($dataList) {
            foreach ($dataList as $k => $v) {
                $numAll = $v['num2'];

                //会员总共得到的询盘数
                $count_comment = $xunpan->getCommentsum($v['user_id']);
                $countAll = $xunpan->commentAllCount($v['user_id']);
                $countAll = $countAll + $count_comment;

                //会员当天日期得到的询盘 评论的id  集合
                $dayList = $xunpan->commentDayListByDate($v['user_id'], $date);
                $commentIds = '';
                if ($dayList) {
                    foreach ($dayList as $ka => $va) {
                        $commentIds .= $va['comment_id'] . ",";
                    }
                    $commentIds = substr($commentIds, 0, -1);
                }
                //会员当天得到的询盘数
                $countDay = $dayList ? count($dayList) : 0;

                //会员添加的可用关键次总数
                $countKey = $xunpan->userKeyCount($v['user_id']);

                $xun_number = $v['meal_name'] == 'first' ? $first : ($v['meal_name'] == 'middle' ? $middle : $tall); //每日询盘上限数
               /// echo $v['user_id'],'----'.$xun_number;exit;
                $nowCount = ($xun_number - $countDay) > 0 ? ($xun_number - $countDay) : 0; //当前可用的询盘数
                if ($countKey > 0) {//新增判断 如果关键词数量大于0才分配 没有设置关键词不分配数据
                    $numOneKey = $nowCount > ceil($xun_number / 4 / $countKey) ? ceil($xun_number / 4 / $countKey) : $nowCount; //当前关键词应被分配的询盘数
                }
                //如果已经得到的询盘总数小于套餐的询盘总数 并且 当前可得的询盘数大于0
                if ($countAll < $numAll && $numOneKey) {
                    $this->keyDistribution($v['user_id'], $v['id'], $v['name'], $commentIds, $numOneKey, $nowCount, $date);
                } else {
                    unset($dataList[$k]);
                }
                //sleep(1);
            }
        }
        exit('分配完成');
        // echo "<pre/>";print_r($dataList);exit;
    }

    /**
     *    每一个关键词的评论分配
     *    user_id		用户id
     *    keyword_id    关键词id
     *    name        	关键词名称
     *    commentIds    当天已经得到的评论id集合
     *    numOneKey    	当前关键词可得到评论数
     *    nowCount    	当前可用的询盘数
     */
    function keyDistribution($user_id, $keyword_id, $name, $commentIds, $numOneKey, $nowCount, $date) {
        $xunpan = new Xunpan();
        $contentLike = $xunpan->getKeyComment($user_id);

        //查询出可用的包含标题关键词、内容关键词的评论
        $newCommentAll = '';
        if ($contentLike) {
            $newCommentAll = $xunpan->newCommentAllBydate($contentLike, $name, $commentIds, $date);
        }

        if (!empty($newCommentAll)) {
            $this->dataComment($newCommentAll, $user_id, $keyword_id, $numOneKey, $nowCount, $date);
        }
    }

    /**
     *    随机分配指定数评论给当前关键词
     *    dataList			条件查询出的当天的评论数据
     *    user_id        	用户编号
     *    keyword_id		用户关键词编号
     *    num				当前关键词分配的评论数
     *    nowCount			当前可用的询盘数
     */
    function dataComment($dataList, $user_id, $keyword_id, $num, $nowCount, $date) {
        $data = [];
        $i = 0;
        if ($dataList && count($dataList) > $num && $num > 0) {
            $arr = array_rand($dataList, $num);
            if (is_array($arr)) {
                foreach ($arr as $k => $v) {
                    $data[$i]['partner_id'] = $user_id;
                    $data[$i]['keyword_id'] = $keyword_id;
                    $data[$i]['comment_id'] = $dataList[$v]['id'];
                    $data[$i]['create_time'] = $date;
                    ++$i;
                }
            } else {
                $data[$i]['partner_id'] = $user_id;
                $data[$i]['keyword_id'] = $keyword_id;
                $data[$i]['comment_id'] = $dataList[$arr]['id'];
                $data[$i]['create_time'] = $date;
            }
        } elseif ($dataList && count($dataList) <= $num && $num > 0) {
            foreach ($dataList as $k => $v) {
                $data[$i]['partner_id'] = $user_id;
                $data[$i]['keyword_id'] = $keyword_id;
                $data[$i]['comment_id'] = $v['id'];
                $data[$i]['create_time'] = $date;
                ++$i;
            }
        }
        $this->saveData($data, $nowCount);
        // echo "<pre/>";print_r($dataList);
        // echo "<pre/>";print_r($data);exit;
    }

    /**
     *    插入数据到会员询盘表
     *    data        需要插入到询盘数据的评论id、会员id、关键词id、当前日期集合
     *    nowCount    当前可用的询盘数
     */
    function saveData($data, $nowCount) {
        $xunpan = new Xunpan();
        if (isset($data[0])) {
            foreach ($data as $k => $v) {
                if (--$nowCount >= 0) {
                    $xunpan->saveComment($v);
                }
            }
        }
    }

}
